Restringere l'accesso alle risorse web tramite le direttive deny e allow

Per determinare se un dato client può accedere ad una risorsa, Apache esegue una serie di controlli divisa in più fasi:
1- Apache tramite il modulo mod_access verifica se l'IP del client può accedere alla risorsa richiesta
2- Si richiedono informazioni aggiuntive al client come username e password.

Il modulo mod_access viene comunemente utilizzato per l'host-based authentication ed è possibile eseguire il matching delle regole per il controllo degli accessi tramite alcuni parametri come ip, hostname e HTTP headers.
Le direttive gestite dal modulo sono allow, deny e order.

Controllo dell'accesso tramite il nome di un host
Abilita l'accesso ad uno specifico host openskills.info
allow from openskills.info
Abilita l'accesso a tutti gli host del dominio openskills.info
allow from .openskills.info
Nega l'accesso a tutti gli host del dominio openskills.info
deny from .openskills.info

Le direttive allow e deny, rispettivamente, permettono o negano l'accesso alle risorse quando l'host client matcha il criterio per cui è valida la direttiva. Nel caso in cui si debbano includere nella configurazione entrambe le direttive per gestire l'accesso alla stessa risorsa bisogna affiancarle alla direttiva order per determinare l'ordine con cui vengono lette le direttive allow e deny. Per esempio:
Implementa policy permissive: lascia accedere tutti gli Host tranne quelli del dominio openskills.info:
order allow,deny
allow from all
deny from openskills.info

Implementa policy restrittive: blocca tutti gli accessi tranne quelli di host del dominio openskills.info
order deny,allow
deny from all
allow from openskills.info


Controllo dell'accesso tramite IP
Soluzione ideale rispetto all'utilizzo dei nomi, poichè non obbliga il web server a eseguire reverse lookup DNS per ottenere i nomi di host dall'IP. Nell'esempio che segue viene permesso l'accesso solo dai range di IP specificati:
<Directory />
order deny,allow
deny from all
allow from 127.0.0.1 192.168.208 10.0.0.0/8 192.168.215.0/255.255.249.0
</Directory>


E' possibile specificare un singolo IP oppure una network intera o una subnet, in questi due ultimi casi occorre specificare la netmask, è permesso utilizzare la nomenclatura in cui si specificano semplicemente i bit che identificano l'indirizzo di rete (permessi solo 8 16 24) o semplicemnte evitando di scrivere gli zeri (192.168) oppure scrivendo la netmask in formato esteso (255.255.255.0).

Controllo degli accessi tramite i HTTP header
Una possibile alternativa è quello di affiancare alle direttive allow e deny le direttive BrowserMatch e SetEnvIf per negare o abilitare l'accesso ad una risorsa a seconda di una definibile variabile d'ambiente.
BrowserMatch ^Mozilla*
<Directory /mozilla/>
order deny,allow
deny from all
allow from env=netscape_browser
</Directory>

Questa funzionalità apre un universo di possibilità che permettono operazioni piuttosto sofisticate come permettere l'accesso solo se il Referrer è di un certo tipo, impedire l'accesso a robot che si presentano con User Agent identificabili, a spider/crawler/site grabbers ecc.

Privacy Policy